package com.service.bean.other;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.service.bean.area.Road;
import com.service.bean.point.LabelPoint;
import com.service.bean.point.RoadCheckPoint;

/**
 * 用于存储前后两条GPS数据计算的中间标识结果
 * @author sxc
 *
 */
public class VariableData {

	public VariableData(){
		
	}
	
	public VariableData(String deviceNo){ 
		this.deviceNo = deviceNo;
	}
	
	/**
	 * 车辆Gps编号
	 */
	public String deviceNo;
	/**
	 * 第一次在非工作路线上行驶的时间</br>
	 * 用于107报警
	 */
	public Date outOfRoadTime;
	/**
	 * 第一次持续出区域时间</br>
	 * 用于108报警
	 */
	public Date outOfAreaTime;
	/**
	 * 第一次进报警区域的时间</br>
	 * 用于109报警
	 */
	public Date inAreaTime;
	/**
	 * 第一次停车未熄火时间</br>
	 * 用于130报警
	 */
	public Date unFlameOutWhenParkingTime;
	/**
	 * 第一次超速时间</br>
	 * 用于101报警
	 */
	public Date overSpeedTime;
	/**
	 * 第一次作业超时时间</br>
	 * 用于129报警
	 */
	public Date workOverTime;
	/**
	 * 第一次在非作业区域/路线滞留时间,用于137报警
	 */
	public Date inDefaultAreaTime;
	/**
	 * 第一次行驶超速时间</br>
	 * 用于204报警
	 */
	public Date overSpeedTime204;
	/**
	 * 上一次超速报警时间</br>
	 * 用于101报警
	 */
	public Date lastAlarmTime101;
	/**
	 * 上一次未按规定路线行驶报警时间</br>
	 * 用于107报警
	 */
	public Date lastAlarmTime107;
	/**
	 * 上一次出区域报警时间</br>
	 * 用于108报警
	 */
	public Date lastAlarmTime108;
	/**
	 * 上一次进区域报警时间</br>
	 * 用于109报警
	 */
	public Date lastAlarmTime109;
	/**
	 * 上一次高峰时间出去工作报警时间</br>
	 * 用于128报警
	 */
	public Date lastAlarmTime128;
	/**
	 * 上一次作业超时报警时间</br>
	 * 用于129报警
	 */
	public Date lastAlarmTime129;
	/**
	 * 上一次停车未熄火报警时间</br>
	 * 用于130报警
	 */
	public Date lastAlarmTime130;
	/**
	 * 上一次报警时间,用于137报警
	 */
	public Date lastAlarmTime137;
	/**
	 * 上一次行车超速报警时间<br>
	 * 用于204报警
	 */
	public Date lastAlarmTime204;
	/**
	 * 上一次副发时长报警时间<br>
	 * 用于206报警
	 */
	public Date lastAlarmTime206;		
	/**
	 * 实际上班时间
	 */
	public Date activeWorkStartTime;
	/**
	 * 实际下班时间(最后一条工作数据)
	 */
	public Date activeWorkEndTime;
	/**
	 * 工作记录(用于缺勤检查)
	 */
	public int workRecord = 0;
	/**
	 * 记录上一次离线报警的时间
	 */
	public Date offlineTime;
	
	/**
	 * 区域-路段-检测点
	 * 用于公路上的检测点 
	 */
	public List<Road> roadList = new ArrayList<Road>();
	/**
	 * 用于统计垃圾收集点未去报警</br>
	 * 该集合中保存已去的垃圾收集点,不重复保存
	 */
	public List<LabelPoint> collPoints = new ArrayList<LabelPoint>();
	/**
	 * 统计未按收集点顺序收集报警
	 */
	public List<LabelPoint> collectionList = new ArrayList<LabelPoint>();
	/**
	 * 用于统计作业遍数
	 */
	public Map<String, Integer> workTimesMap = new HashMap<String, Integer>();
	/**
	 * 用于统计作业路段未去报警
	 */
	private Map<String, List<RoadCheckPoint>> workPointMap = new HashMap<String, List<RoadCheckPoint>>();
	
	/**
	 * gps经过检测点范围时，将其记录到集合中，当gps离开检测点范围时，从记录中移除该点，防止重复计算作业次数</br>
	 */
	public List<String> passCheckPoints = new ArrayList<String>();
	/**
	 * 第一次作业超速报警的时间</br>
	 * 用于122报警
	 */
	public Date alarmTime122;
	/**
	 * 第一次低温时间</br>
	 * 用于07001报警
	 */
	public Date lowTempTime07001;
	/**
	 * 开始报警时间
	 * 用于07001报警
	 */
	public String beginSignalId07001;
	/**
	 * 第一次高温时间</br>
	 * 用于07002报警
	 */
	public Date overTempTime07002;
	/**
	 * 开始报警时间
	 * 用于07002报警
	 */
	public String beginSignalId07002;
	/**
	 * 第一次低温时间</br>
	 * 用于08001报警
	 */
	public Date lowTempTime08001;
	/**
	 * 开始报警时间
	 * 用于08001报警
	 */
	public String beginSignalId08001;
	/**
	 * 第一次高温时间</br>
	 * 用于08002报警
	 */
	public Date overTempTime08002;
	/**
	 * 开始报警时间
	 * 用于08002报警
	 */
	public String beginSignalId08002;
	/**
	 * 第一次低温时间</br>
	 * 用于09001报警
	 */
	public Date lowTempTime09001;
	/**
	 * 开始报警时间
	 * 用于09001报警
	 */
	public String beginSignalId09001;
	/**
	 * 第一次高温时间</br>
	 * 用于09002报警
	 */
	public Date overTempTime09002;
	/**
	 * 开始报警时间
	 * 用于09002报警
	 */
	public String beginSignalId09002;
	/**
	 * 第一次低速时间
	 * 用于09003报警
	 */
	public Date lowPaverSpeed09003;
	/**
	 * 开始报警时间
	 * 用于09003报警
	 */
	public String beginSignalId09003;
	/**
	 * 第一次超速时间
	 * 用于09004报警
	 */
	public Date overPaverSpeed09004;
	/**
	 * 开始报警时间
	 * 用于09004报警
	 */
	public String beginSignalId09004;
	/**
	 * 第一次低速时间
	 * 用于09005报警
	 */
	public Date lowIronPlateTemp09005;
	/**
	 * 开始报警时间
	 * 用于09005报警
	 */
	public String beginSignalId09005;
	/**
	 * 第一次低温时间
	 * 用于09006报警
	 */
	public Date overIronPlateTemp09006;
	/**
	 * 开始报警时间
	 * 用于09006报警
	 */
	public String beginSignalId09006;
	/**
	 * 第一次低速时间
	 * 用于09007报警
	 */
	public Date lowVibrationSpeed09007;
	/**
	 * 开始报警时间
	 * 用于09007报警
	 */
	public String beginSignalId09007;
	/**
	 * 第一次超速时间
	 * 用于09008报警
	 */
	public Date overVibrationSpeed09008;
	/**
	 * 开始报警时间
	 * 用于09008报警
	 */
	public String beginSignalId09008;
	/**
	 * 第一次低速时间
	 * 用于09009报警
	 */
	public Date lowRamSpeed09009;
	/**
	 * 开始报警时间
	 * 用于09009报警
	 */
	public String beginSignalId09009;
	/**
	 * 第一次超速时间
	 * 用于09010报警
	 */
	public Date overRamSpeed09010;
	/**
	 * 开始报警时间
	 * 用于09010报警
	 */
	public String beginSignalId09010;
	/**
	 * 第一次低温时间
	 * 用于A0001报警
	 */
	public Date lowRollerTempA0001;
	/**
	 * 开始报警时间
	 * 用于A0001报警
	 */
	public String beginSignalIdA0001;
	/**
	 * 第一次高温时间
	 * 用于A0002报警
	 */
	public Date overRollerTempA0002;
	/**
	 * 开始报警时间
	 * 用于A0002报警
	 */
	public String beginSignalIdA0002;
	/**
	 * 第一次低速时间
	 * 用于A0003报警
	 */
	public Date lowRollerSpeedA0003;
	/**
	 * 开始报警时间
	 * 用于A0003报警
	 */
	public String beginSignalIdA0003;
	/**
	 * 第一次低速时间
	 * 用于A0004报警
	 */
	public Date overRollerSpeedA0004;
	/**
	 * 开始报警时间
	 * 用于A0004报警
	 */
	public String beginSignalIdA0004;
	/**
	 * 上一次报警时间
	 * 用于A0004报警
	 */
	public Date lastAlarmTimeA0004;
	/**
	 * 上一次报警时间
	 * 用于A0003报警
	 */
	public Date lastAlarmTimeA0003;
	/**
	 * 上一次报警时间
	 * 用于A0002报警
	 */
	public Date lastAlarmTimeA0002;
	/**
	 * 上一次报警时间
	 * 用于A0001报警
	 */
	public Date lastAlarmTimeA0001;
	/**
	 * 上一次报警时间
	 * 用于09010报警
	 */
	public Date lastAlarmTime09010;
	/**
	 * 上一次报警时间
	 * 用于09009报警
	 */
	public Date lastAlarmTime09009;
	/**
	 * 上一次报警时间
	 * 用于09008报警
	 */
	public Date lastAlarmTime09008;
	/**
	 * 上一次报警时间
	 * 用于09007报警
	 */
	public Date lastAlarmTime09007;
	/**
	 * 上一次报警时间
	 * 用于09006报警
	 */
	public Date lastAlarmTime09006;
	/**
	 * 上一次报警时间
	 * 用于09005报警
	 */
	public Date lastAlarmTime09005;
	/**
	 * 上一次报警时间
	 * 用于09004报警
	 */
	public Date lastAlarmTime09004;
	/**
	 * 上一次低速报警时间
	 * 用于09003报警
	 */
	public Date lastAlarmTime09003;
	/**
	 * 上一次高温报警时间</br>
	 * 用于09002报警
	 */
	public Date lastAlarmTime09002;
	/**
	 * 上一次低温报警时间</br>
	 * 用于09001报警
	 */
	public Date lastAlarmTime09001;
	/**
	 * 上一次高温报警时间</br>
	 * 用于08002报警
	 */
	public Date lastAlarmTime08002;
	/**
	 * 上一次低温报警时间</br>
	 * 用于08001报警
	 */
	public Date lastAlarmTime08001;
	/**
	 * 上一次高温报警时间</br>
	 * 用于07002报警
	 */
	public Date lastAlarmTime07002;
	/**
	 * 上一次低温报警时间</br>
	 * 用于07001报警
	 */
	public Date lastAlarmTime07001;
	/**
	 * 记录作业时经过(清扫)的检测点，一个点仅记录一次
	 * @param road
	 * @param point
	 */
	public void recondWorkPoint(Road road, RoadCheckPoint point) {
		if ((road == null) || (point == null))
			return;
		if (workPointMap.containsKey(road.roadId)) {
			List<RoadCheckPoint> list = (List<RoadCheckPoint>) workPointMap.get(road.roadId);
			if (!list.contains(point)) {
				list.add(point);
				workPointMap.put(road.roadId, list);
			}
		} else {
			List<RoadCheckPoint> list = new ArrayList<RoadCheckPoint>();
			list.add(point);
			workPointMap.put(road.roadId, list);
		}
	}
	
	/**
	 * 根据路段获取该路段的作业记录
	 * @param road
	 * @return
	 */
	public List<RoadCheckPoint> getWorkRecond(Road road) {
		if (!workPointMap.containsKey(road.roadId))
			return null;
		return (List<RoadCheckPoint>) workPointMap.get(road.roadId);
	}
	
	/**
	 * 清除作业缓存
	 */
	public void clearWorkPointMap() {
		workPointMap.clear();
	}
	
}
